<!DOCTYPE html>

<html lang="en">
<head>
  <title>WPS Request Difference Example</title><!-- Required meta tags -->
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <!-- OL stylesheet -->
  <link rel="stylesheet" href="https://openlayers.org/en/v4.4.2/css/ol.css" type="text/css"> 
</head>

<body>
  <h1>WPS Request Difference Example</h1>
  
<!-- OpenLayers JS dependency, debug build -->
<script type="text/javascript" src="https://openlayers.org/en/v4.4.2/build/ol-debug.js"></script>

<!-- Begin WPS Javascript -->
<script type="text/javascript">
     
    postData = `<?xml version="1.0" encoding="UTF-8"?>
  <wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
    <ows:Identifier>JTS:difference</ows:Identifier>
    <wps:DataInputs>
      <wps:Input>
        <ows:Identifier>a</ows:Identifier>
        <wps:Reference mimeType="text/xml; subtype=gml/3.1.1" xlink:href="http://geoserver/wps" method="POST">
          <wps:Body>
            <wps:Execute version="1.0.0" service="WPS">
              <ows:Identifier>gs:CollectGeometries</ows:Identifier>
              <wps:DataInputs>
                <wps:Input>
                  <ows:Identifier>features</ows:Identifier>
                  <wps:Reference mimeType="text/xml" xlink:href="http://geoserver/wps" method="POST">
                    <wps:Body>
                      <wps:Execute version="1.0.0" service="WPS">
                      <ows:Identifier>gs:BufferFeatureCollection</ows:Identifier>
                        <wps:DataInputs>
                          <wps:Input>
                            <ows:Identifier>features</ows:Identifier>
                            <wps:Reference mimeType="text/xml" xlink:href="http://geoserver/wfs" method="POST">
                              <wps:Body>
                                <wfs:GetFeature service="WFS" version="1.0.0"
    outputFormat="GML2"
    xmlns:topp="http://www.openplans.org/topp"
    xmlns:wfs="http://www.opengis.net/wfs"
    xmlns:ogc="http://www.opengis.net/ogc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.opengis.net/wfs
                        http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">
                                  <wfs:Query srsName="EPSG:2272" typeName="learning-geoserver:pois">
                                    <ogc:Filter>
                                       <ogc:PropertyIsEqualTo>
                                          <ogc:PropertyName>info_type</ogc:PropertyName>
                                          <ogc:Literal>Apple</ogc:Literal>
                                       </ogc:PropertyIsEqualTo>
                                    </ogc:Filter>
                                    </wfs:Query>
                                </wfs:GetFeature>
                              </wps:Body>
                            </wps:Reference>
                          </wps:Input>
                          <wps:Input>
                            <ows:Identifier>distance</ows:Identifier>
                            <wps:Data>
                              <wps:LiteralData>100</wps:LiteralData>
                            </wps:Data>
                          </wps:Input>
                        </wps:DataInputs>
                        <wps:ResponseForm>
                          <wps:RawDataOutput mimeType="text/xml; subtype=wfs-collection/1.0">
                            <ows:Identifier>result</ows:Identifier>
                          </wps:RawDataOutput>
                        </wps:ResponseForm>
                      </wps:Execute>
                    </wps:Body>
                  </wps:Reference>
                </wps:Input>
              </wps:DataInputs>
              <wps:ResponseForm>
                <wps:RawDataOutput mimeType="text/xml; subtype=gml/3.1.1">
                  <ows:Identifier>result</ows:Identifier>
                </wps:RawDataOutput>
              </wps:ResponseForm>
            </wps:Execute>
          </wps:Body>
        </wps:Reference>
      </wps:Input>
      <wps:Input>
        <ows:Identifier>b</ows:Identifier>
        <wps:Reference mimeType="text/xml; subtype=gml/3.1.1" xlink:href="http://geoserver/wps" method="POST">
          <wps:Body>
            <wps:Execute version="1.0.0" service="WPS">
              <ows:Identifier>gs:CollectGeometries</ows:Identifier>
              <wps:DataInputs>
                <wps:Input>
                  <ows:Identifier>features</ows:Identifier>
                  <wps:Reference mimeType="text/xml" xlink:href="http://geoserver/wps" method="POST">
                    <wps:Body>
                      <wps:Execute version="1.0.0" service="WPS">
                      <ows:Identifier>gs:BufferFeatureCollection</ows:Identifier>
                        <wps:DataInputs>
                          <wps:Input>
                            <ows:Identifier>features</ows:Identifier>
                            <wps:Reference mimeType="text/xml" xlink:href="http://geoserver/wfs" method="POST">
                              <wps:Body>
                                <wfs:GetFeature service="WFS" version="1.0.0" outputFormat="GML2" xmlns:learning-geoserver="http://packtpub.com/learning-geoserver">
                                  <wfs:Query  srsName="EPSG:2272" typeName="learning-geoserver:pois"/>
                                </wfs:GetFeature>
                              </wps:Body>
                            </wps:Reference>
                          </wps:Input>
                          <wps:Input>
                            <ows:Identifier>distance</ows:Identifier>
                            <wps:Data>
                              <wps:LiteralData>50</wps:LiteralData>
                            </wps:Data>
                          </wps:Input>
                        </wps:DataInputs>
                        <wps:ResponseForm>
                          <wps:RawDataOutput mimeType="text/xml; subtype=wfs-collection/1.0">
                            <ows:Identifier>result</ows:Identifier>
                          </wps:RawDataOutput>
                        </wps:ResponseForm>
                      </wps:Execute>
                    </wps:Body>
                  </wps:Reference>
                </wps:Input>
              </wps:DataInputs>
              <wps:ResponseForm>
                <wps:RawDataOutput mimeType="text/xml; subtype=gml/3.1.1">
                  <ows:Identifier>result</ows:Identifier>
                </wps:RawDataOutput>
              </wps:ResponseForm>
            </wps:Execute>
          </wps:Body>
        </wps:Reference>
      </wps:Input>
    </wps:DataInputs>
    <wps:ResponseForm>
      <wps:RawDataOutput mimeType="application/json">
        <ows:Identifier>result</ows:Identifier>
      </wps:RawDataOutput>
    </wps:ResponseForm>
  </wps:Execute>`;
            //postData = 'hello world';
            url = 'http://localhost:8080/geoserver/wps';
            var req = new XMLHttpRequest();
            req.open("POST", url, true);
            req.setRequestHeader('Content-type', 'text/xml');
            req.onreadystatechange = function() {
                if (req.readyState != 4) return;
                if (req.status != 200 && req.status != 304) {
                    alert('HTTP error ' + req.status);
                    return;
                }
                console.log(req.responseText);
                alert(req.responseText);
                if (req.readyState == 4) return;
            };
            req.send(postData);
</script>
</body>
</html>
